package com.system.runtai.controller;

import com.system.common.result.Result;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;

@RestController
@CrossOrigin(origins = "*")
@Api(tags = "下载图片")
@RequestMapping("/runtai/common")
public class ImageController {

    @Value("${imageUrl}")
    private String basePath;

    @Value("${urlVideo}")
    private String urlVideo;

    /**
     * 文件上传
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public Result upload(MultipartFile file) {
        //获取文件名
        String originalFilename = file.getOriginalFilename();
        //获取文件格式
        String subFile= originalFilename.substring(originalFilename.lastIndexOf("."));
        //生成随机的文件名字
        String filename = UUID.randomUUID().toString() + subFile;
        File file1 = new File(basePath);
        //判断存放图片的目录是否存在，不存在则进行创建
        if (!file1.exists()) {
            file1.mkdirs();
        }


        try {
            //错误示范
//            file.transferTo(new File(file1 + filename));
            //将临时文件转存到指定位置
            file.transferTo(new File(basePath + filename));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Result.ok(filename);
    }

    /**
     * 文件下载
     * @param name
     * @param response
     */
    @GetMapping("/download")
    public void download(String name, HttpServletResponse response) {
        try {
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
            //输出流，通过输出流将文件写回浏览器
            ServletOutputStream outputStream = response.getOutputStream();

            response.setContentType("image/jpeg");

            int len = 0;
//            byte[] bytes = new byte[1024];
            byte[] bytes = new byte[4096];
            while ((len = fileInputStream.read(bytes)) != -1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }

            outputStream.close();
            fileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

//    @PostMapping("/load")
//    public List<Object> uploadImages(@RequestParam("files") MultipartFile[] files) {
//        List<String> fileUrls = new ArrayList<>();
//
//        String filename = null;
//        for (MultipartFile file : files) {
//            // 获取文件名
//            String fileName = file.getOriginalFilename();
//
//            // 保存文件到服务器指定目录
//            // ...
//            //获取文件格式
//            String subFile = fileName.substring(fileName.lastIndexOf("."));
//            //生成随机的文件名字
//            filename = UUID.randomUUID().toString() + subFile;
//            File file1 = new File(basePath);
//            //判断存放图片的目录是否存在，不存在则进行创建
//            if (!file1.exists()) {
//                file1.mkdirs();
//            }
//
//
//            try {
//                //错误示范
////            file.transferTo(new File(file1 + filename));
//                //将临时文件转存到指定位置
//                file.transferTo(new File(basePath + filename));
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//
//            // 构造文件URL
////            String fileUrl = basePath + fileName;
//            fileUrls.add(filename);
//
//        }
//        for (String fileUrl : fileUrls) {
//
////            String substring = fileUrl.substring(fileUrl.lastIndexOf(","));
//            return (List<Object>) Result.ok(fileUrl);
//        }
//        return Result.fail();
//
//    }

//    @ApiOperation("上传多张图片")
//    @PostMapping(value = "/listImages")
//    // 创建一个DiskFileItemFactory对象，设置内存阀值为10KB
//            public Result listImages(){
//    DiskFileItemFactory factory = new DiskFileItemFactory();
//
//    // 设置最大内存限制为2MB
//      factory.setSizeThreshold(2 * 1024 * 1024);
//
//    // 获取ServletContext对象
////    ServletContext servletContext = getServletConfig().getServletContext();
//        ServletConfig servletConfig = new ServletConfig() {
//            @Override
//            public String getServletName() {
//                return null;
//            }
//
//            @Override
//            public ServletContext getServletContext() {
//                return null;
//            }
//
//            @Override
//            public String getInitParameter(String name) {
//                return null;
//            }
//
//            @Override
//            public Enumeration<String> getInitParameterNames() {
//                return null;
//            }
//        }
//    ServletContext servletContext = servletConfig().get.getServletContext();
//
//    // 指定保存路径
//    String savePath = servletContext.getRealPath("/images");
//
//    // 将工厂与保存路径关联起来
//      factory.setRepository(new File(savePath));
//
//    // 创建一个新的文件上传处理器
//    ServletFileUpload upload = new ServletFileUpload(factory);
//
//      try {
//        // 解析HTTP POST请求
//        List items = upload.parseRequest(request);
//
//        for (Iterator iter = items.iterator(); iter.hasNext(); ) {
//            FileItem item = (FileItem) iter.next();
//
//            if (!item.isFormField()) {
//                // 判断当前表单字段是否为文件类型
//
//                // 获取原始文件名
//                String fileName = item.getName();
//
//                // 构造保存到服务器的完整路径
//                String fileSavePath = savePath + "/" + fileName;
//
//                // 保存文件到服务器
//                item.write(new File(fileSavePath));
//
//                System.out.println("文件 " + fileName + " 已成功上传到 " + fileSavePath);
//            } else {
//                // 其他非文件类型的表单字段处理...
//            }
//        }
//    } catch (Exception e) {
//        throw new RuntimeException("文件上传失败", e);
//    }
//      return Result.ok();
//}



}
